package datatypes;

import handler.AnrufHandler;

import java.util.List;
import java.util.Queue;

import org.jdesktop.swingx.mapviewer.GeoPosition;

public class Einsatz
{
	public AnrufHandler anrufHandler;
	
	private String titel;
	private GeoPosition position;
	private Einsatztyp typ;
	private Queue<Anruf> anrufe;
	private List<Patient> patienten;
	private boolean benPol;
	private boolean benFw;
	
	private boolean isCompleted = false;
	private long dauer = 0;
	private long startzeit;
	
	public Einsatz(AnrufHandler anrufHandler, String titel, GeoPosition position, Einsatztyp typ, List<Patient> patienten, Queue<Anruf> anrufe, boolean benPol, boolean benFw)
	{
		this.anrufHandler = anrufHandler;
		this.titel = titel;
		this.position = position;
		this.typ = typ;
		this.patienten = patienten;
		this.anrufe = anrufe;
		this.benPol = benPol;
		this.benFw = benFw;
	}

	public boolean isCompleted() {
		return isCompleted;
	}

	public long getDauer() {
		return dauer;
	}
	
	public String getTitel()
	{
		return titel;
	}

	public GeoPosition getPosition()
	{
		return position;
	}

	public Einsatztyp getTyp()
	{
		return typ;
	}

	public List<Patient> getPatienten()
	{
		return patienten;
	}

	public boolean benPol()
	{
		return benPol;
	}

	public boolean benFw()
	{
		return benFw;
	}
	
	public void start(long gametime)
	{
		this.startzeit = gametime;
	}
	
	
	public void update(long gametime)
	{
		while(anrufe.peek().getZeitpunkt()< (gametime-startzeit))
		{
			anrufHandler.initAnruf(anrufe.poll());
		}
		
		for(Patient p : patienten)
		{
			p.update(gametime-startzeit);
		}
		
		if (patienten.isEmpty() && !benFw && !benPol && anrufe.isEmpty())
		{
			dauer = gametime - startzeit;
			isCompleted = true;
		}
	}
	
}

